package swagger2

type Swagger2Json struct {
	Swagger             string                         `json:"swagger,omitempty"`
	Info                InfoJson                       `json:"info,omitempty"`
	Host                string                         `json:"host,omitempty"`
	BasePath            string                         `json:"basePath,omitempty"`
	Schemes             []string                       `json:"schemes,omitempty"`
	Consumes            []string                       `json:"consumes,omitempty"`
	Produces            []string                       `json:"produces,omitempty"`
	Definitions         map[string]DefinitionJson      `json:"definitions,omitempty"`
	Paths               map[string]map[string]PathJson `json:"paths,omitempty"`
	SecurityDefinitions map[string]AuthJson            `json:"securityDefinitions,omitempty"`
}

type InfoJson struct {
	Title       string      `json:"title,omitempty"`
	Description string      `json:"description,omitempty"`
	Version     string      `json:"version,omitempty"`
	Contact     ContactJson `json:"contact,omitempty"`
}

type ContactJson struct {
	Name  string `json:"name,omitempty"`
	Email string `json:"email,omitempty"`
}

type DefinitionJson struct {
	Type        string                  `json:"type,omitempty"`
	Properties  map[string]PropertyJson `json:"properties,omitempty"`
	Required    []string                `json:"required,omitempty"`
	Description string                  `json:"description,omitempty"`
}

type PropertyJson struct {
	Type        string                  `json:"type,omitempty"`
	Example     any                     `json:"example,omitempty"`
	Ref         string                  `json:"$ref,omitempty"`
	Items       *ItemsJson              `json:"items,omitempty"`
	Properties  map[string]PropertyJson `json:"properties,omitempty"`
	Format      string                  `json:"format,omitempty"`
	Description string                  `json:"description,omitempty"`
}

type ItemsJson struct {
	Type string `json:"type,omitempty"`
	Ref  string `json:"$ref,omitempty"`
}

type PathJson struct {
	Tags        []string                 `json:"tags,omitempty"`
	Summary     string                   `json:"summary,omitempty"`
	Description string                   `json:"description,omitempty"`
	Parameters  []ParameterJson          `json:"parameters,omitempty"`
	Responses   map[string]ParameterJson `json:"responses,omitempty"`
	Consumes    []string                 `json:"consumes,omitempty"`
	Produces    []string                 `json:"produces,omitempty"`
}

type ParameterJson struct {
	Name        string      `json:"name,omitempty"`
	In          string      `json:"in,omitempty"`
	Description string      `json:"description,omitempty"`
	Required    bool        `json:"required,omitempty"`
	Type        string      `json:"type,omitempty"`
	Format      string      `json:"format,omitempty"`
	Items       *ItemsJson  `json:"items,omitempty"`
	Default     any         `json:"default,omitempty"`
	Schema      *SchemaJson `json:"schema,omitempty"`
}

type SchemaJson struct {
	Ref   string     `json:"$ref,omitempty"`
	Type  string     `json:"type,omitempty"`
	Items *ItemsJson `json:"items,omitempty"`
}
type AuthJson struct {
	Type string `json:"type,omitempty"`
	Name string `json:"name,omitempty"`
	In   string `json:"in,omitempty"`
}
